/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年9月5日
 * 项目： rainhy-servicelogger
 */
package com.rainhy.servicelogger.builder.springdata;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.joda.time.DateTime;

import com.rainhy.servicelogger.context.LogLevel;
import com.rainhy.servicelogger.context.LogSource;

/**
 * springData 日志默认实现
 * 
 * @author rain
 * @version [版本号, 2016年9月5日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@MappedSuperclass
public abstract class AbstractSpringDataServiceLog implements SpringDataServiceLog {
    
    /** 主键 */
    @Id
    @Column(length = 32)
    private String id;
    
    /** 创建日期 */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false, updatable = false)
    private Date createdDate;
    
    /** 客户端IP */
    @Column(length = 32)
    private String clientIpAddress;
    
    /** 日志信息 */
    @Column(length = 5000)
    private String message;
    
    /** 等级 */
    @Column(length = 32)
    @Enumerated(EnumType.STRING)
    private LogLevel level;
    
    /** 来源 */
    @Column(length = 64)
    @Enumerated(EnumType.STRING)
    private LogSource source;
    
    /** 备注 */
    @Column(length = 5000)
    private String remark;
    
    /** 客户端IP */
    @Override
    public String getClientIpAddress() {
        return clientIpAddress;
    }
    
    /** 创建日期 */
    @Override
    public DateTime getCreatedDate() {
        return createdDate == null ? null : new DateTime(createdDate);
    }
    
    /** 主键 */
    @Override
    public String getId() {
        return id;
    }
    
    /** 等级 */
    @Override
    public LogLevel getLevel() {
        return level;
    }
    
    /** 日志信息 */
    @Override
    public String getMessage() {
        return message;
    }
    
    /** 备注 */
    @Override
    public String getRemark() {
        return remark;
    }
    
    /** 来源 */
    @Override
    public LogSource getSource() {
        return source;
    }
    
    /** 客户端IP */
    @Override
    public void setClientIpAddress(String clientIpAddress) {
        this.clientIpAddress = clientIpAddress;
    }
    
    /** 创建日期 */
    @Override
    public void setCreatedDate(DateTime createdDate) {
        this.createdDate = createdDate == null ? null : createdDate.toDate();
    }
    
    /** 主键 */
    @Override
    public void setId(String id) {
        this.id = id;
    }
    
    /** 等级 */
    @Override
    public void setLevel(LogLevel level) {
        this.level = level;
    }
    
    /** 日志信息 */
    @Override
    public void setMessage(String message) {
        this.message = message;
    }
    
    /** 备注 */
    @Override
    public void setRemark(String remark) {
        this.remark = remark;
    }
    
    /** 来源 */
    @Override
    public void setSource(LogSource source) {
        this.source = source;
    }
    
}
